package com.sky.task;

import com.sky.entity.Orders;
import com.sky.mapper.OrderMapper;
import lombok.extern.slf4j.Slf4j;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

import javax.annotation.Resource;
import java.time.LocalDateTime;
import java.util.List;

@Component
@Slf4j
public class OrderTask {

    //自定义定时任务类
    @Resource
    private OrderMapper orderMapper;


    //取消超时订单
    @Scheduled(cron = "0 0/1 * * * ?")
    public void autoCancelOrder(){
        log.info("定时任务：取消超时订单");
        //查询数据库，查询状态为“待付款”的订单
        LocalDateTime time = LocalDateTime.now().plusMinutes(-15);
        List<Orders> orderList= orderMapper.selectByStatusandtine(Orders.PENDING_PAYMENT,time);
        //如果订单已经超时，则取消订单，更新订单状态为“已取消”，并更新订单取消时间
        for (Orders orders : orderList) {
            orders.setCancelReason("用户超时，自动取消");
            orders.setStatus(Orders.CANCELLED);
            orders.setCancelTime(LocalDateTime.now());
            orderMapper.updateOrder(orders);
        }

        //如果订单没有超时，则不处理
    }

    //完成派送中的订单
    @Scheduled(cron = "0 0 1 * * ? ")
    public void complete(){
        log.info("定时任务：完成派送中的订单");
        //查询数据库，查询状态为“派送中”的订单
        //如果订单已经超时，则取消订单，更新订单状态为“已完成”，并更新订单完成时间
        LocalDateTime time = LocalDateTime.now().plusMinutes(-60);
        List<Orders> ordersList = orderMapper.selectByStatusandtine(Orders.DELIVERY_IN_PROGRESS ,time);
        for (Orders orders : ordersList) {
            orders.setStatus(Orders.COMPLETED);
            orderMapper.updateOrder(orders);
        }
        //如果订单没有超时，则不处理
    }
    
}
